#ifndef _N2F_CORE_H_
#define _N2F_CORE_H_

#include "IwGx.h"
#include "IwGxFont.h"

#include "s3ePointer.h"
#include "s3eKeyboard.h"
#include "s3eOSReadString.h"
#include "s3eOSExec.h"
#include "s3eutils.h"

#include "Geometry.h"

#include <map>
#include <vector>
#include <string>

// For this, read up at: http://www.keil.com/support/man/docs/armccref/armccref_babcbhjh.htm
// Basically, this helps with inlining and improves stack usage on ARM
#ifndef VALUE_IN_REGS
	#ifdef __ARMCC_VERSION
		#define VALUE_IN_REGS __value_in_regs
	#elif _MSC_VER
		#define VALUE_IN_REGS
	#elif defined __GNUC__
		#define VALUE_IN_REGS
	#else
		#define VALUE_IN_REGS
	#endif
#endif

namespace N2F
{
	namespace Iw3D
	{
		struct ScaleFactor
		{
			CIwFVec2 offset;
			float scale;
		};

		struct InputPoint
		{
			bool isPressed, isMoving, isDragging;
			uint32 pointId, x, y;
		};

		struct InputKey
		{
			s3eWChar ch;
			char key;
		};

		struct InputState
		{
			bool pointerIsAvailable, keysAreAvailable, osKeyboardIsAvailable, multiTouchAvailable;
		};
	}
}

#endif
